package br.com.toscano.contpedido.webservice;

import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.Calendar;

import javax.imageio.ImageIO;
import javax.inject.Inject;
import javax.jws.WebResult;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Row;
import org.json.JSONException;

import br.com.toscano.contpedido.business.PedidoBC;
import br.com.toscano.contpedido.business.RecebimentoBC;
import br.com.toscano.contpedido.domain.Pedido;
import br.com.toscano.contpedido.domain.PedidoProduto;
import br.com.toscano.contpedido.domain.Recebimento;
import br.com.toscano.contpedido.util.PdfUtils;
import br.com.toscano.contpedido.util.Util;
import br.com.toscano.contpedido.view.filter.ConfiguracaoFilter;
import br.com.toscano.contpedido.view.servlet.ExibeRecebimentoServlet;
import br.gov.frameworkdemoiselle.stereotype.FacadeController;
import br.gov.frameworkdemoiselle.transaction.Transactional;

import com.itextpdf.text.DocumentException;

@Path("/ServicosExternos")
@FacadeController
public class ServicosExternos {

	@Inject
	private PedidoBC pedidoBC;

	@Inject
	private RecebimentoBC recebimentoBC;

	@GET
	@Path("/exibePedidoServlet")
	@Produces("text/html")
	@Transactional
	public Response exibePedidoServlet(@Context HttpServletRequest request, @QueryParam("idPedido") Long idPedido)
			throws JSONException, IOException {
		Pedido pedido = pedidoBC.load(idPedido);
		
		String contexto = request.getRequestURL().toString();
		int posicao = contexto.indexOf("/rest/ServicosExternos");
		if (posicao != -1) {
			contexto = contexto.substring(0,posicao);
		}
		
		StringBuilder sb = gerarHtmlExrato(contexto, pedido, true, true,ConfiguracaoFilter.RELATORIOS_REPETICOES_QUANTIDADE, true);
		ResponseBuilder response = Response.ok(sb.toString());
		return response.build();
	}

	@GET
	@Path("/gerarPedidoPDF")
	@Produces(MediaType.APPLICATION_OCTET_STREAM)
	@WebResult(name = "anexo")
	@Transactional
	public Response gerarPedidoPDF(@Context HttpServletRequest request, @QueryParam("idPedido") Long idPedido) throws JSONException, IOException, DocumentException {
		Pedido pedido = pedidoBC.load(idPedido);
		
		String contexto = request.getRequestURL().toString();
		int posicao = contexto.indexOf("/rest/ServicosExternos");
		if (posicao != -1) {
			contexto = contexto.substring(0,posicao);
		}

		StringBuilder sb = gerarHtmlExrato(contexto, pedido, false, false, 1, false);
		
		

		String diretorioLogo = Util.dirCorrente() + "/images/" + ConfiguracaoFilter.LOGO;

		File fnew = new File(diretorioLogo);
		BufferedImage originalImage = ImageIO.read(fnew);
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		ImageIO.write(originalImage, "jpg", baos);
		byte[] imageInByte = baos.toByteArray();

		String html = sb.toString();
		String nova = "<br/>";

		String antiga = "<BR>";
		int index = html.indexOf(antiga);
		while (index != -1) {
			String antes = html.substring(0,index);
			String depois = html.substring(index + antiga.length(), html.length());
			html = antes + nova + depois;
			index = html.indexOf(antiga);
		}
		antiga = "<br>";
		index = html.indexOf(antiga);
		while (index != -1) {
			String antes = html.substring(0,index);
			String depois = html.substring(index + antiga.length(), html.length());
			html = antes + nova + depois;
			index = html.indexOf(antiga);
		}
		
		ByteArrayOutputStream bOut = new ByteArrayOutputStream();
		PdfUtils.generatePDF(html, bOut, imageInByte);
		bOut.close();
		
		ResponseBuilder response = Response.ok(bOut.toByteArray());
		response.header("Content-disposition",
				"attachment; filename=pedidido_" + idPedido + ".pdf");

		return response.build();
//		
//
//		// Get the FacesContext
//		FacesContext facesContext = FacesContext.getCurrentInstance();
//
//		// Get HTTP response
//		HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
//
//		// Set response headers
//		response.reset(); // Reset the response in the first place
//		response.setHeader("Content-Type", "application/pdf"); // Set only the
//																// content type
//
//		// Open response output stream
//		OutputStream responseOutputStream = response.getOutputStream();
//
//		// // Read PDF contents and write them to the output
//		// byte[] bytesBuffer = new byte[2048];
//		// int bytesRead;
//		// while ((bytesRead = pdfInputStream.read(bytesBuffer)) > 0) {
//		responseOutputStream.write(bOut.toByteArray());
//		// }
//
//		// Make sure that everything is out
//		responseOutputStream.flush();
//
//		// Close both streams
//		// pdfInputStream.close();
//		responseOutputStream.close();
//
//		// JSF doc:
//		// Signal the JavaServer Faces implementation that the HTTP response for
//		// this request has already been generated
//		// (such as an HTTP redirect), and that the request processing lifecycle
//		// should be terminated
//		// as soon as the current phase is completed.
//		facesContext.responseComplete();
		
		//return null;

	}

	public static StringBuilder gerarHtmlExrato(String contexto, Pedido pedido, boolean ehVoltaUmDiretorioImagem, boolean adicionarImprimir, int quantidade, boolean exibeSeparacao) {
		StringBuilder sb = new StringBuilder();
		sb.append("<html>");
		sb.append("	<head><title>Pedido - "
				+ ((pedido != null) ? pedido.getId() : "") + "</title></head>");
		sb.append("	<Body>");
		for (int i = 0; i < quantidade; i++) {
			sb.append("		<table  border='0' width='800' height='480'>");
			if (exibeSeparacao) {
				sb.append("			<tr>");
				sb.append("				<td height='10' style='font-family:" + ConfiguracaoFilter.RELATORIOS_FONT + "'><hr/></td>");
				sb.append("			</tr>");
			}
			sb.append("			<tr>");
			sb.append("				<td valign='top' style='font-family:" + ConfiguracaoFilter.RELATORIOS_FONT + "' width='50%' >");
			gerarPedido(pedido, sb, ehVoltaUmDiretorioImagem, contexto);
			sb.append("				</td>");
			sb.append("			</tr>");
			sb.append("		</table>");
		}
		if (exibeSeparacao) {
			sb.append("		<table  border='0' width='800'>");
			sb.append("			<tr>");
			sb.append("				<td height='10' style='font-family:" + ConfiguracaoFilter.RELATORIOS_FONT + "'><hr/></td>");
			sb.append("			</tr>");
			sb.append("		</table>");
		}

		sb.append("		<br/>");
		if (adicionarImprimir) {
			ExibeRecebimentoServlet.adicionarImprimir(sb);
		}

		sb.append("</Body>");
		sb.append("</html>");
		return sb;
	}

	private static void gerarPedido(Pedido pedido, StringBuilder sb, boolean ehVoltaUmDiretorioImagem, String contexto) {
		sb.append("		<table  border='0' width='600' height='40'>");
		sb.append("			<tr >");
		sb.append("				<td style='font-family:"
				+ ConfiguracaoFilter.RELATORIOS_FONT + "'  valign='top'>");
		sb.append("					<table  border='0' width='100%' height='100%'>");
		sb.append("						<tr>");
		sb.append("							<td style='font-family:"
				+ ConfiguracaoFilter.RELATORIOS_FONT + "' valign='top'>");
		String voltarUmDiretorioImagem = "";
		if (ehVoltaUmDiretorioImagem) {
			voltarUmDiretorioImagem = "../../";
		}
		sb.append("								<img width='" + ConfiguracaoFilter.LOGO_WIGHT
				+ "' height='" + ConfiguracaoFilter.LOGO_HEIGTH
				+ "' border='0' src='"
				+ contexto
				+ "/images/"
				+ ConfiguracaoFilter.LOGO + "'/>");
		sb.append("							</td>");
		sb.append("						</tr>");
		sb.append("						<tr>");
		sb.append("						</tr>");
		sb.append("					</table>");
		sb.append("				</td>");
		sb.append("				<td style='font-family:"
				+ ConfiguracaoFilter.RELATORIOS_FONT
				+ "' align='center' valign='top' ><font size='"
				+ ConfiguracaoFilter.PEDIDO_FONTE_TITULO + "' > "
				+ ConfiguracaoFilter.NOME_PADARIA_RELATORIO + "</font>"
				+ "				<br/><font size='"
				+ ConfiguracaoFilter.PEDIDO_FONTE_DADOS_CLIENTE + "'>"
				+ ConfiguracaoFilter.NOME_PADARIA_RUA + "</font> ");
		if (ConfiguracaoFilter.NOME_PADARIA_CNPJ != null
				&& !"".equals(ConfiguracaoFilter.NOME_PADARIA_CNPJ.trim())) {
			sb.append("				<br/><font size='"
					+ ConfiguracaoFilter.PEDIDO_FONTE_DADOS_CLIENTE
					+ "'> " + ConfiguracaoFilter.NOME_PADARIA_CNPJ
					+ "</font> ");
		}
		sb.append("				<br/><font size='"
				+ ConfiguracaoFilter.PEDIDO_FONTE_DADOS_CLIENTE + "'>"
				+ ConfiguracaoFilter.NOME_PADARIA_FONE + "</font> "
				+ "				<br/><font size='"
				+ ConfiguracaoFilter.PEDIDO_FONTE_DADOS_CLIENTE + "'>"
				+ ConfiguracaoFilter.NOME_PADARIA_EMAIL + "</font> "
				+ "				</td>");
		sb.append("			</tr>");
		sb.append("		</table>");

		if (pedido != null) {

			BigDecimal valorTotalOriginal = BigDecimal.ZERO;
			BigDecimal valorTotalCobrado = BigDecimal.ZERO;
			int contadorProduto = 0;
			for (PedidoProduto pp : pedido.getListaPedidoProduto()) {
				contadorProduto++;

				BigDecimal multiplicacao = pp
						.getProduto()
						.getValor()
						.setScale(2, BigDecimal.ROUND_UP)
						.multiply(
								pp.getQuantidade().setScale(2,
										BigDecimal.ROUND_UP))
						.setScale(2, BigDecimal.ROUND_UP);
				valorTotalOriginal = valorTotalOriginal.add(multiplicacao);

				valorTotalCobrado = valorTotalCobrado.add(pp
						.getValorTotalItem());
			}
			;

			sb.append("		<table border='0' width='600' cellspacing='0' cellpadding='0'>");
			sb.append("			<tr>");
			sb.append("				<td style='font-family:"
					+ ConfiguracaoFilter.RELATORIOS_FONT
					+ "' width='33%' ><font size='"
					+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL
					+ "'  ><strong>Nº Pedido</strong>: " + pedido.getId()
					+ "</font></td>");

			sb.append("				<td style='font-family:"
					+ ConfiguracaoFilter.RELATORIOS_FONT
					+ "' width='33%' ><font size='"
					+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL
					+ "'  ><strong>Operador</strong>: " + pedido.getUsuario().getNome()
					+ "</font></td>");

			sb.append("			</tr>");
			sb.append("			<tr>");
			sb.append("				<td style='font-family:"
					+ ConfiguracaoFilter.RELATORIOS_FONT
					+ "' width='33%' ><font size='"
					+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL
					+ "'  ><strong>Cliente</strong>: "
					+ pedido.getCliente().getNome() + "</font></td>");
			sb.append("				<td style='font-family:"
					+ ConfiguracaoFilter.RELATORIOS_FONT
					+ "' width='33%' ><font size='"
					+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL
					+ "'  ><strong>Responsável</strong>: "
					+ pedido.getCliente().getResponsavel() + "</font></td>");
			sb.append("			</tr>");
			sb.append("			<tr>");
			sb.append("			</tr>");
			sb.append("			<tr>");
			sb.append("				<td colspan='2' style='font-family:"
					+ ConfiguracaoFilter.RELATORIOS_FONT
					+ "' width='50%' ><font size='"
					+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL
					+ "'  ><strong>Endereço</strong>: "
					+ pedido.getCliente().getEndereco() + ", "
					+ pedido.getCliente().getBairro() + " -  "
					+ pedido.getCliente().getCidade() + " - "
					+ pedido.getCliente().getEstado() + " </font></td>");
			sb.append("			</tr>");
			sb.append("			<tr>");
			sb.append("				<td style='font-family:"
					+ ConfiguracaoFilter.RELATORIOS_FONT
					+ "' width='50%' ><font size='"
					+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL
					+ "'  ><strong>Complemento</strong>: "
					+ pedido.getCliente().getComplemento() + "</font></td>");
			sb.append("				<td style='font-family:"
					+ ConfiguracaoFilter.RELATORIOS_FONT
					+ "' width='50%' ><font size='"
					+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL
					+ "'  ><strong>Referência</strong>: "
					+ pedido.getCliente().getReferencia() + "</font></td>");
			sb.append("			</tr>");
			sb.append("			<tr>");
			sb.append("				<td style='font-family:"
					+ ConfiguracaoFilter.RELATORIOS_FONT
					+ "' width='50%' ><font size='"
					+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL
					+ "'  ><strong>Fone</strong>: "
					+ pedido.getCliente().getFone() + "</font></td>");
			sb.append("				<td style='font-family:"
					+ ConfiguracaoFilter.RELATORIOS_FONT
					+ "' width='50%' ><font size='"
					+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL
					+ "'  ><strong>Fone</strong>: "
					+ pedido.getCliente().getFone2() + "</font></td>");
			sb.append("			</tr>");
			sb.append("			<tr>");
			String hora = pedido.getHora() + "";
			if (hora.length() == 1)
				hora = "0" + hora;
			String minuto = pedido.getMinuto() + "";
			if (minuto.length() == 1)
				minuto = "0" + minuto;
			sb.append("				<td style='font-family:"
					+ ConfiguracaoFilter.RELATORIOS_FONT
					+ "' width='50%' ><font size='"
					+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL
					+ "'  ><strong>Data Entrega</strong>: "
					+ Util.dateToString(pedido.getDataEntrega()) + " - " + hora
					+ ":" + minuto + "</font></td>");
			// sb.append("				<td style='font-family:"
			// +ConfiguracaoFilter.RELATORIOS_FONT +
			// "' width='50%' ><font size='"+
			// ConfiguracaoFilter.PEDIDO_FONTE_GERAL+"'  ><strong>Fone 3 </strong>: "
			// + pedido.getCliente().getFone3() +"</font></td>");
			sb.append("				<td style='font-family:"
					+ ConfiguracaoFilter.RELATORIOS_FONT
					+ "' width='33%' ><font size='"
					+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL
					+ "'  ><strong>Valor</strong>: R$ "
					+ Util.formataValorParaString(pedido.getValorTotalPedido()
							.setScale(2, BigDecimal.ROUND_UP), 2)
					+ "</font></td>");
			sb.append("			</tr>");
			if (!valorTotalOriginal.equals(valorTotalCobrado)) {
				sb.append("			<tr>");
				sb.append("				<td style='font-family:"
						+ ConfiguracaoFilter.RELATORIOS_FONT
						+ "' width='33%' colspan='2'><font size='"
						+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL
						+ "'  ><strong>Desconto</strong>: "
						+ Util.formataValorParaString(
								valorTotalOriginal.subtract(valorTotalCobrado)
										.setScale(2, BigDecimal.ROUND_UP), 2)
						+ "</font></td>");
				sb.append("			</tr>");
			}
			if (pedido.getObservacao() != null
					&& !"".equals(pedido.getObservacao())) {
				sb.append("			<tr>");
				sb.append("				<td style='font-family:"
						+ ConfiguracaoFilter.RELATORIOS_FONT
						+ "' width='33%' colspan='2'><font size='"
						+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL
						+ "'  ><strong>Observação</strong>: "
						+ pedido.getObservacao() + "</font></td>");
				sb.append("			</tr>");
			}

			sb.append("		</table>");
			sb.append("		<br/>");

			sb.append("		<table border='1' cellspacing='0' cellpadding='1'  width='600' height='40'>");
			sb.append("			<tr bgcolor='AAAAAA'>");
			sb.append("				<td style='font-family:"
					+ ConfiguracaoFilter.RELATORIOS_FONT
					+ "' align='center'> <font size='"
					+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL
					+ "' ><strong>Item</strong></font></td>");
			sb.append("				<td style='font-family:"
					+ ConfiguracaoFilter.RELATORIOS_FONT
					+ "' align='center'> <font size='"
					+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL
					+ "' ><strong>Descrição</strong></font></td>");			
			sb.append("				<td style='font-family:"
					+ ConfiguracaoFilter.RELATORIOS_FONT
					+ "' align='center'> <font size='"
					+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL
					+ "' ><strong>Quantidade</strong></font></td>");
			sb.append("				<td style='font-family:"
					+ ConfiguracaoFilter.RELATORIOS_FONT
					+ "' align='center'> <font size='"
					+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL
					+ "' ><strong>Valor Unitario</strong></font></td>");
			sb.append("				<td style='font-family:"
					+ ConfiguracaoFilter.RELATORIOS_FONT
					+ "' align='center'> <font size='"
					+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL
					+ "' ><strong>Valor Item</strong></font></td>");
			sb.append("			</tr>");

			contadorProduto = 0;
			for (PedidoProduto pp : pedido.getListaPedidoProduto()) {
				contadorProduto++;
				sb.append("			<tr>");
				sb.append("				<td style='font-family:"
						+ ConfiguracaoFilter.RELATORIOS_FONT
						+ "'> <font size='"
						+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL + "' >"
						+contadorProduto + "</font></td>");
				sb.append("				<td style='font-family:"
						+ ConfiguracaoFilter.RELATORIOS_FONT
						+ "'> <font size='"
						+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL + "' >"
						+ pp.getProduto().getDescricao() + "</font></td>");
				sb.append("				<td style='font-family:"
						+ ConfiguracaoFilter.RELATORIOS_FONT
						+ "' align='center'> <font size='"
						+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL
						+ "' >"
						+ Util.formataValorParaStringCasaDecimaisSeExistir(
								pp.getQuantidade(), 2) + "</font></td>");
				sb.append("				<td style='font-family:"
						+ ConfiguracaoFilter.RELATORIOS_FONT
						+ "' align='center'> <font size='"
						+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL + "' >"
						+ Util.formataValorParaString(pp.getValorUnitario(), 2)
						+ "</font></td>");
				sb.append("				<td style='font-family:"
						+ ConfiguracaoFilter.RELATORIOS_FONT
						+ "' align='center'> <font size='"
						+ ConfiguracaoFilter.PEDIDO_FONTE_GERAL
						+ "' >"
						+ Util.formataValorParaString(pp.getValorTotalItem(), 2)
						+ "</font></td>");
				sb.append("			</tr>");
			}
			sb.append("		</table>");
		}

		sb.append("		<br/>");
		boolean exibirResponsavel = false;
		if (ConfiguracaoFilter.PEDIDO_EXIBE_RESPONSAVEL == 1) {
			exibirResponsavel = true;
		}
		if (exibirResponsavel) {
			ExibeRecebimentoServlet.adicionarResponsavel(sb, true);
		}
	}

	@GET
	@Path("/gerarExcelRecebimento")
	@Produces(MediaType.APPLICATION_OCTET_STREAM)
	@WebResult(name = "anexo")
	@Transactional
	public Response gerarExcelRecebimento(
			@QueryParam("idRecebimento") Long idRecebimento)
			throws JSONException, IOException {

		Recebimento recebimento = recebimentoBC.load(idRecebimento);
		if (recebimento != null) {
			FileInputStream file = new FileInputStream(new File(
					Util.dirCorrente() + "/modeloRecebimento.xls"));

			// Get the workbook instance for XLS file
			org.apache.poi.hssf.usermodel.HSSFWorkbook workbook = new org.apache.poi.hssf.usermodel.HSSFWorkbook(
					file);
			HSSFSheet sheet = workbook.getSheetAt(0);

			alterarValor(1, 1, sheet, ConfiguracaoFilter.NOME_PADARIA_RELATORIO);
			alterarValor(1, 37, sheet, idRecebimento + "");
			alterarValor(2, 1, sheet, ConfiguracaoFilter.NOME_PADARIA_RUA);
			alterarValor(3, 1, sheet, ConfiguracaoFilter.NOME_PADARIA_FONE);
			alterarValor(4, 5, sheet, ConfiguracaoFilter.NOME_PADARIA_EMAIL
					+ "  - " + ConfiguracaoFilter.NOME_PADARIA_CNPJ);

			alterarValor(7, 8, sheet, recebimento.getCliente().getNome());
			alterarValor(7, 29, sheet, recebimento.getCliente().getFone() + "/"
					+ recebimento.getCliente().getFone2() + "/"
					+ recebimento.getCliente().getFone3());
			alterarValor(8, 4, sheet, recebimento.getCliente().getEndereco()
					+ ", " + recebimento.getCliente().getComplemento() + ", "
					+ recebimento.getCliente().getReferencia());
			alterarValor(8, 30, sheet, recebimento.getCliente().getBairro());
			alterarValor(9, 10, sheet,
					Util.dateToString(recebimento.getDataRecebimento()));

			alterarValor(
					12,
					10,
					sheet,
					Util.formataValorParaString(
							recebimento.getValorTotalRecebimento(), 2));
			alterarValor(13, 10, sheet, recebimento.getFormaRecebimento()
					.getDescricao());

			ByteArrayOutputStream bos = new ByteArrayOutputStream();
			try {
				workbook.write(bos);
			} finally {
				bos.close();
			}
			// byte[] bytes = bos.toByteArray();
			ResponseBuilder response = Response.ok(bos.toByteArray());
			response.header("Content-disposition",
					"attachment; filename=recebimento_" + idRecebimento
							+ ".xls");

			return response.build();

		}
		return null;
	}

	@GET
	@Path("/gerarExcelPedido")
	@Produces(MediaType.APPLICATION_OCTET_STREAM)
	@WebResult(name = "anexo")
	@Transactional
	public Response gerarExcelPedido(@QueryParam("idPedido") Long idPedido)
			throws JSONException, IOException {

		Pedido pedido = pedidoBC.load(idPedido);
		if (pedido != null) {
			FileInputStream file = new FileInputStream(new File(
					Util.dirCorrente() + "/modelo.xls"));

			// Get the workbook instance for XLS file
			org.apache.poi.hssf.usermodel.HSSFWorkbook workbook = new org.apache.poi.hssf.usermodel.HSSFWorkbook(
					file);
			HSSFSheet sheet = workbook.getSheetAt(0);

			alterarValor(1, 1, sheet, ConfiguracaoFilter.NOME_PADARIA_RELATORIO);
			alterarValor(1, 37, sheet, idPedido + "");
			alterarValor(2, 1, sheet, ConfiguracaoFilter.NOME_PADARIA_RUA);
			alterarValor(3, 1, sheet, ConfiguracaoFilter.NOME_PADARIA_FONE);
			alterarValor(4, 5, sheet, ConfiguracaoFilter.NOME_PADARIA_EMAIL
					+ "  - " + ConfiguracaoFilter.NOME_PADARIA_CNPJ);

			alterarValor(7, 8, sheet, pedido.getCliente().getNome());
			alterarValor(2, 30, sheet, pedido.getUsuario().getNome());
			alterarValor(7, 29, sheet, pedido.getCliente().getFone() + "/"
					+ pedido.getCliente().getFone2() + "/"
					+ pedido.getCliente().getFone3());
			alterarValor(8, 4, sheet, pedido.getCliente().getEndereco() + ", "
					+ pedido.getCliente().getComplemento() + ", "
					+ pedido.getCliente().getReferencia());
			alterarValor(8, 30, sheet, pedido.getCliente().getBairro());
			alterarValor(9, 10, sheet,
					Util.dateToString(pedido.getDataEntrega()));
			String diaSemana = "";
			Calendar cal = Calendar.getInstance();
			cal.setTime(pedido.getDataEntrega());
			int dia = cal.get(Calendar.DAY_OF_WEEK);
			if (dia == Calendar.SATURDAY) {
				diaSemana = "Domingo";
			} else if (dia == Calendar.MONDAY) {
				diaSemana = "Segunda-Feira";
			} else if (dia == Calendar.MONDAY) {
				diaSemana = "Segunda-Feira";
			} else if (dia == Calendar.TUESDAY) {
				diaSemana = "Terça-Feira";
			} else if (dia == Calendar.WEDNESDAY) {
				diaSemana = "Quarta-Feira";
			} else if (dia == Calendar.THURSDAY) {
				diaSemana = "Quinta-Feira";
			} else if (dia == Calendar.FRIDAY) {
				diaSemana = "Sexta-Feira";
			} else if (dia == Calendar.SATURDAY) {
				diaSemana = "Sábado";
			}
			alterarValor(9, 25, sheet, diaSemana);

			String hora = pedido.getHora() + "";
			if (hora.length() == 1)
				hora = "0" + hora;
			String minuto = pedido.getMinuto() + "";
			if (minuto.length() == 1)
				minuto = "0" + minuto;

			alterarValor(9, 36, sheet, hora + ":" + minuto);

			CellStyle style = workbook.createCellStyle();
			Font font = workbook.createFont();
			style.setFont(font);

			for (int i = 0; i < pedido.getListaPedidoProduto().size(); i++) {
				PedidoProduto pp = pedido.getListaPedidoProduto().get(i);
				alterarValor(13 + i, 1, sheet, (i+1)  + "-" + pp.getProduto().getDescricao());

				alterarValor(13 + i, 24, sheet, pp.getQuantidade().toString()
						.replace(".", ","));

				alterarValor(13 + i, 29, sheet, pp.getValorUnitario()
						.toString().replace(".", ","));

				alterarValor(13 + i, 34, sheet, pp.getValorTotalItem()
						.toString().replace(".", ","));
			}

			alterarValor(13 + pedido.getListaPedidoProduto().size(), 1, sheet,
					"=======================================================================");
			alterarValor(14 + pedido.getListaPedidoProduto().size(), 29, sheet,
					"TOTAL:");
			alterarValor(14 + pedido.getListaPedidoProduto().size(), 34, sheet,
					pedido.getValorTotalPedido().toString().replace(".", ","));

			ByteArrayOutputStream bos = new ByteArrayOutputStream();
			try {
				workbook.write(bos);
			} finally {
				bos.close();
			}
			// byte[] bytes = bos.toByteArray();
			ResponseBuilder response = Response.ok(bos.toByteArray());
			response.header("Content-disposition",
					"attachment; filename=pedido_" + idPedido + ".xls");

			return response.build();

		}
		return null;
	}

	private void alterarValor(int linha, int coluna, HSSFSheet sheet,
			String valor) {
		Row rol = sheet.getRow(linha - 1);
		if (rol == null) {
			rol = sheet.createRow(linha - 1);
		}
		Cell cell = rol.getCell(coluna - 1);
		if (cell == null) {
			cell = rol.createCell(coluna - 1);
		}
		cell.setCellValue(valor);
	}

}